在EKS的宇宙裡,AWS會負責去管理Master Node並且維護,而我們可以access Worker Node,Worker Node對比AWS的服務則為EC2,若有Key就可以直接access到擁有public ip的EC2,或是在建置Cluster的時候,若有啟用public Endpoint,就可以透過網路使用kubectl執行API access pod。
Pod則是EKS裡運作服務的最小單位,而應用程式可以在Container裡執行並在Pod底下運行一個甚至多個來完成服務,且Container之間可以互相使用資源。
使用EKS建立cluster的時候,需要注意instanceType,會決定Node裡面的Pod最高上限值
若Pod達到上限值,可以將不必要的Pod刪除,或增加Node數量,來提高Pod的可用空間
Pod上限計算公式
t3.micro: MaxENI = 2, PrivateIPv4 per ENI = 2
2 * (2 – 1) + 2 = 4 pods
t3.small: MaxENI = 3, PrivateIPv4 per ENI = 4
3 * (4 – 1) + 2 = 11 pods
ENI資訊參考:
https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html#AvailableIpPerENI
以下會撰寫一個Pod描述檔,並做說明解釋
apiVersion: v1
kind: Pod
metadata:
name: myappforfew
labels:
name: myappforfew
spec:
containers:
- name: myappforfew
image: johnson860312/awswebdb
resources:
limits:
memory: "512Mi"
cpu: "512m"
requests:
memory: "128Mi"
cpu: "256m"
ports:
- containerPort: 80
nodeSelector:
name: fewpods
---
apiVersion: v1
kind: Pod
metadata:
name: myappformore
labels:
name: myappformore
spec:
containers:
- name: myappformore
image: johnson860312/awswebdb
resources:
limits:
memory: "512Mi"
cpu: "512m"
requests:
memory: "128Mi"
cpu: "256m"
ports:
- containerPort: 80
nodeSelector:
name: morepods
metadata:
spec: 定義Pod的規格。需要怎樣的Container
resources: 分配CPU/Memory資源
limits: 可以分別定義CPU/Memory的上限值
requests: 直接分配固定的CPU/Memory資源
ports: 透過browser可以訪問的port
nodeSelector: 將現在的Pod指定到想要的Node上。
Node規格:
fewpods => t3.micro (4 Pods)
morepods => t3.small (11 Pods)
透過YAML建立Pod
kubectl apply -f pod2.yaml
查看目前的Pod
kubectl get pods -n [namespaces] => 若沒有特別定義namespaces,則為default
查看Pod的資訊
kubectl describe pod myappforfew -n [namespaces]
因為達到一個Node所擁有Pod的上限,所以狀態為Pending
透過kubectl將local端的port mapping到EKS
kubectl port-forward [pod] [local port]:[container port]
善用Lens,可以快速查看EKS Cluster上的所有資訊
刪除資源
kubectl delete -f [yaml file]
之後的EKS操作都會使用t3.small,因為有足夠多的Pod資源可以使用,且筆者會使用Lens的Metrics Stack,所以會占用一些Pod的空間